package main

import "fmt"

func main() {
	var n_int int
	n_int = 123_000
	fmt.Println(n_int) // 123000
	n_int = 2.0        // 不需要四舍五入，可以编译运行
	fmt.Println(n_int) // 2

	// 值，进制
	fmt.Println("=====进制=====")
	fmt.Println(0b011) // 二进制 3
	fmt.Println(0o011) // 八进制 9
	fmt.Println(0x011) // 16进制 17

	// 浮点数
	fmt.Println(123.e+2) // 12300
	fmt.Println(123.e-1) // 12.3

	// 一个十六进制浮点数字面量必须以一个以2为底数的整数指数部分。
	//这样的一个整数指数部分由字母p或者P带一个十进制的整数字面量组成
	//（yPn表示y乘以2n的意思，而yP-n表示y除以2n的意思）
	fmt.Println(0x1p-2)  // = 1.0/4 = 0.25
	fmt.Println(0x2.p10) // = 2.0 * 1024 = 2048.0
	fmt.Println(0x.8p1)  // = 8.0/16 * 2 = 1.0
	fmt.Println(0x1.Fp3) // = (1+15/16)*8 = 15.5

	fmt.Println(1 + 2i) // 虚数

	// 编译出错 The value of '-1' (type untyped int) cannot be represented by the type uint8
	//var n_uint8 uint8 = -1
	for i := -1; i <= 1; i++ {
		var n_uint8 uint8
		n_uint8 = uint8(i)
		// 255 0 1
		fmt.Print(n_uint8, " ")
	}

	/*
		注意：\之后必须跟随三个八进制数字字符（0-7）表示一个byte值，
		\x之后必须跟随两个十六进制数字字符（0-9，a-f和A-F）表示一个byte值，
		\u之后必须跟随四个十六进制数字字符表示一个rune值（此rune值的高四位都为0），
		\U之后必须跟随八个十六进制数字字符表示一个rune值。
		这些八进制和十六进制的数字字符序列表示的整数必须是一个合法的Unicode码点值，否则编译将失败。
	*/
	fmt.Println("\n rune值的字面量形式。下面都是打印true")
	fmt.Println('a' == 97)
	fmt.Println('a' == '\141')
	fmt.Println('a' == '\x61')
	fmt.Println('a' == '\u0061')
	fmt.Println('a' == '\U00000061')
	fmt.Println(0x61 == '\x61')
	fmt.Println('\u4f17' == '众')
}
